optional chaining operator
用於簡潔地安全存取物件屬性
運算子前方值若為undefined或null(nullish),會停止運算,並回傳undefined code:javascript
// user 沒有 address 屬性
let user = {};
// 不會報錯,而是返回 undefined
alert(user?.address?.street);
// 等同於
alert(user.addrss ? (user.address.street ? user.address.street : null) : null);
// 以及 obj.method
obj.method?.();
只應用於屬性可以不存在的地方
例如user物件必須存在,address可選
應該寫為user.address?.street而非user?.address?.street
前方變數必須已宣告
否則會觸發ReferenceError錯誤
不能用於賦值語句的左側